import { Shape } from '@antv/x6'
import { Options } from '@antv/x6/lib/graph/options'
import { useYkEditorDrawStore } from '@yk/components/draw/editor-draw/store'

const store = useYkEditorDrawStore()

export const graphOptions: Options.Manual = {
  // 网格
  grid: true,
  // 互动
  interacting: {
    // 节点拖动
    nodeMovable (cellView) {
      const interactingSelect = cellView.cell.data?.interactingSelect
      return interactingSelect ? !interactingSelect.disableDefaultMovable : true
    },
    edgeMovable: false // 边拖动
  },
  // 鼠标滚轮缩放页面行为
  mousewheel: {
    // 是否启用
    enabled: true,
    // 修饰键
    modifiers: ['ctrl'],
    // 最小比例
    minScale: 0.1,
    // 最大比例
    maxScale: 4
  },
  // 配置全局的连线规则
  connecting: {
    createEdge ({ sourceCell }) {
      const createEdge = sourceCell?.data?.connecting?.createEdge
      if (createEdge) {
        return createEdge()
      } else {
        return new Shape.Edge(store.defaultLineStyle)
      }
    },
    validateConnection (args) {
      console.log(args.edge)
      console.log(!(args.edge?.data?.connecting?.validateConnection?.onlyConnectPort))
      return true
    }
  },
  // 通过embedding可以将一个节点拖动到另一个节点中，使其成为另一节点的子节点，默认禁用。
  embedding: {
    // 是否启用
    enabled: true,
    findParent ({ node }) {
      const bbox = node.getBBox()
      return this.getNodes().filter((node) => {
        // 只有 data.parent 为 true 的节点才是父节点
        const data = node.getData()
        if (data && data.parent) {
          const targetBBox = node.getBBox()
          return bbox.isIntersectWithRect(targetBBox)
        }
        return false
      })
    }
  }
  // 撤销/重做
  // history: {
  //   enabled: true,
  //   beforeAddCommand (event, _args) {
  //     const args = _args as any
  //     return !['tools', 'data'].includes(args.key)
  //   }
  // }
}
